/**
以下是用Vuex模拟的数据，真实开发是后台接口
*/
export default {
  namespaced: true,
  state: {
    cart: {
      total: 0, // 商品总价格
      isAllChecked: true,
      items: [
        // {
        //   id: 643228,
        //   num: 1,
        //   minPrice: 339,
        //   name: '法国EISENBERG伊诗贝格 焚身之恋（男士）香水30ml',
        //   pic: 'https://dcdn.it120.cc/2020/11/24/086dc5f4-c821-4efb-9ecd-d95c5f3cc648.jpg',
        //   checked: true
        // }
      ] // 添加的商品
    }
  },
  mutations: {
    calc_total (state) {
      /**
       *计算总价格
       * 所有的已经选中的商品的单价*商品数量的和
       */
      // eslint-disable-next-line prefer-const
      let total = 0 // 每计算之前先对总价格清零
      const checkedItems = state.cart.items.filter(item => item.checked)
      checkedItems.forEach(item => {
        total += item.minPrice * item.num
      })
      // 处理结果，保留两位小数
      total = parseFloat(total.toFixed(2))
      // 处理结果赋值给state中数据
      state.cart.total = total
    },
    // 更新商品数据
    set_cart (state, cart) {
      // 购物车组件深克隆后改变的商品数据赋值给Vuex中的state
      state.cart = cart
    },
    // 删除商品
    del_item (state, index) {
      state.cart.items.splice(index, 1)
    },
    // 改变商品选中状态
    single_checked (state, { index, checked }) {
      state.cart.items[index].checked = checked
    },
    // 单选状态影响全选
    all_checked (state, allChecked) {
      state.cart.isAllChecked = allChecked
    },
    // 全选影响单选
    allChecked_to_singleChecked (state, allChecked) {
      state.cart.isAllChecked = allChecked
      state.cart.items.forEach(item => {
        item.checked = allChecked
      })
    },
    // 加入购物车
    add_cart (state, item) {
      // 判断购物车中是否有该商品，有的话数量加1
      const isHasItem = state.cart.items.findIndex((res, index) => {
        return res.id === item.id
      })
      if (isHasItem === -1) {
        state.cart.items.unshift(item)
      } else {
        state.cart.items[isHasItem].num++
      }
    }
  }
}
